home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
answrbok
/
5_2.lha
/
5_2
/
5_2b4.c
< prev
next >
Wrap
Text File
|
1993-08-08
|
1KB
|
67 lines
* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
* The C++ Answer Book */
* Tony Hansen */
* All rights reserved. */
/ walk down the tree, invoking the named function for
/ each node in the ordered fashion designated
include <tree.h>
tatic void doorderedwalk(tnode *head, walkfn fn,
int rev, int depth,
int beginning, int middle, int end)
if (!head)
return;
// normally go left to right
tnode *node1 = head->left;
tnode *node2 = head->right;
if (rev)
{ // go right to left
node1 = head->right;
node2 = head->left;
}
if (beginning)
(*fn)(head, depth);
doorderedwalk(node1, fn, rev, depth+1,
beginning, middle, end);
if (middle)
(*fn)(head, depth);
doorderedwalk(node2, fn, rev, depth+1,
beginning, middle, end);
if (end)
(*fn)(head, depth);
/ invoke the walking function in various fashions
oid tree:: preorderwalk(walkfn fn, int rev)
doorderedwalk(head, fn, rev, 0, 1, 0, 0);
oid tree:: inorderwalk(walkfn fn, int rev)
doorderedwalk(head, fn, rev, 0, 0, 1, 0);
oid tree:: postorderwalk(walkfn fn, int rev)
doorderedwalk(head, fn, rev, 0, 0, 0, 1);
oid tree:: doubleorderwalk(walkfn fn, int rev)
doorderedwalk(head, fn, rev, 0, 1, 1, 0);
oid tree:: tripleorderwalk(walkfn fn, int rev)
doorderedwalk(head, fn, rev, 0, 1, 1, 1);